using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TopographicProductionTools._Cartography._Features
{
    /// <summary>
    /// <para>Generate Adjoining Sheets Features</para>
    /// <para>Generates features necessary for display in a typical topographic map adjoining sheets diagram.</para>
    /// <para>生成在典型地形图相邻图纸图中显示所需的要素。</para>
    /// </summary>    
    [DisplayName("Generate Adjoining Sheets Features")]
    public class GenerateAdjoiningSheetsFeatures : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GenerateAdjoiningSheetsFeatures()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_feature_dataset">
        /// <para>Input Feature Dataset</para>
        /// <para>An existing feature dataset that will contain the ASG_ feature classes. The tool will create these feature classes if they do not exist.</para>
        /// <para>将包含ASG_要素类的现有要素数据集。如果这些要素类不存在，该工具将创建这些要素类。</para>
        /// </param>
        /// <param name="_area_of_interest">
        /// <para>Area Of Interest</para>
        /// <para>A feature layer with a single selected feature used to identify the center and surrounding AOIs. Adjoining sheets features will be created from the selected AOI and the intersecting AOIs as required.</para>
        /// <para>具有单个选定要素的要素图层，用于识别中心和周围的 AOI。将根据需要从选定的 AOI 和相交的 AOI 创建相邻图纸要素。</para>
        /// </param>
        public GenerateAdjoiningSheetsFeatures(object _in_feature_dataset, object _area_of_interest)
        {
            this._in_feature_dataset = _in_feature_dataset;
            this._area_of_interest = _area_of_interest;
        }
        public override string ToolboxName => "Topographic Production Tools";

        public override string ToolName => "Generate Adjoining Sheets Features";

        public override string CallName => "topographic.GenerateAdjoiningSheetsFeatures";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_feature_dataset, _area_of_interest, _land_features, _scale.GetGPValue(), _clip_aoi_to_sheets.GetGPValue(), _modified_feature_dataset];

        /// <summary>
        /// <para>Input Feature Dataset</para>
        /// <para>An existing feature dataset that will contain the ASG_ feature classes. The tool will create these feature classes if they do not exist.</para>
        /// <para>将包含ASG_要素类的现有要素数据集。如果这些要素类不存在，该工具将创建这些要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Feature Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_feature_dataset { get; set; }


        /// <summary>
        /// <para>Area Of Interest</para>
        /// <para>A feature layer with a single selected feature used to identify the center and surrounding AOIs. Adjoining sheets features will be created from the selected AOI and the intersecting AOIs as required.</para>
        /// <para>具有单个选定要素的要素图层，用于识别中心和周围的 AOI。将根据需要从选定的 AOI 和相交的 AOI 创建相邻图纸要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Area Of Interest")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _area_of_interest { get; set; }


        /// <summary>
        /// <para>Input Land Features</para>
        /// <para>Land features used to generate adjoining sheets features in the ASG_COAST_A and ASG_COAST_L feature classes in the target feature dataset.</para>
        /// <para>用于在ASG_COAST_A中生成相邻图纸要素的陆地要素，在目标要素数据集中生成ASG_COAST_L要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Land Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _land_features { get; set; } = null;


        /// <summary>
        /// <para>Scale</para>
        /// <para><xdoc>
        ///   <para>Defines a factor by which the extent of the Area of Interest is expanded. The expanded extent is used to select adjoining AOIs. Data from the adjoining AOIs is included in the adjoining sheets diagram.</para>
        ///   <bulletList>
        ///     <bullet_item>1:25000—Uses specification MIL-T-89301A as a guide to determine how to expand the width and height of the extent of the Area of Interest.</bullet_item><para/>
        ///     <bullet_item>1:50000—Uses specification MIL-T-89301A to determine how to expand the width and height of the extent of the Area of Interest. This is the default.</bullet_item><para/>
        ///     <bullet_item>1:100000—Uses specification MIL-T-89306 to determine how to expand the width and height of the extent of the Area of Interest.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>定义扩展感兴趣区域范围的因子。扩展范围用于选择相邻的 AOI。来自相邻 AOI 的数据包含在相邻图纸中。</para>
        ///   <bulletList>
        ///     <bullet_item>1：25000 - 使用规范 MIL-T-89301A 作为指南，以确定如何扩展感兴趣区域范围的宽度和高度。</bullet_item><para/>
        ///     <bullet_item>1：50000 - 使用规范 MIL-T-89301A 确定如何扩展感兴趣区域范围的宽度和高度。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>1：100000 - 使用规范 MIL-T-89306 确定如何扩展感兴趣区域范围的宽度和高度。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Scale")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _scale_value _scale { get; set; } = _scale_value.value1;

        public enum _scale_value
        {
            /// <summary>
            /// <para>1:25000</para>
            /// <para>1:25000—Uses specification MIL-T-89301A as a guide to determine how to expand the width and height of the extent of the Area of Interest.</para>
            /// <para>1：25000 - 使用规范 MIL-T-89301A 作为指南，以确定如何扩展感兴趣区域范围的宽度和高度。</para>
            /// </summary>
            [Description("1:25000")]
            [GPEnumValue("1:25000")]
            value0,

            /// <summary>
            /// <para>1:50000</para>
            /// <para>1:50000—Uses specification MIL-T-89301A to determine how to expand the width and height of the extent of the Area of Interest. This is the default.</para>
            /// <para>1：50000 - 使用规范 MIL-T-89301A 确定如何扩展感兴趣区域范围的宽度和高度。这是默认设置。</para>
            /// </summary>
            [Description("1:50000")]
            [GPEnumValue("1:50000")]
            value1,

            /// <summary>
            /// <para>1:100000</para>
            /// <para>1:100000—Uses specification MIL-T-89306 to determine how to expand the width and height of the extent of the Area of Interest.</para>
            /// <para>1：100000 - 使用规范 MIL-T-89306 确定如何扩展感兴趣区域范围的宽度和高度。</para>
            /// </summary>
            [Description("1:100000")]
            [GPEnumValue("1:100000")]
            value2,

        }

        /// <summary>
        /// <para>Clip AOI to Sheets</para>
        /// <para><xdoc>
        ///   <para>Determines if the AOI created for the extent of the adjoining sheets diagram will be clipped to the extents of the sheets to be displayed. If the Clip AOI to Sheets check box is checked, the AOI for the adjoining sheets diagram will be modified from its originally calculated rectangular shape to include any irregular map sheet extents that will be included or excluded in the diagram.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The AOI feature will be clipped by the sheets to be displayed in the adjoining sheet diagram and may have an irregular shape. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The AOI feature will not be clipped and will retain its originally calculated rectangular shape. This may result in partial sheets being displayed in the adjoining sheets diagram.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>确定是否将为相邻图纸图的范围创建的 AOI 裁剪到要显示的图纸的范围。如果选中将 AOI 裁剪为图纸复选框，则相邻图纸逻辑示意图的 AOI 将从其最初计算的矩形形状进行修改，以包括将在逻辑示意图中包含或排除的任何不规则地图图纸范围。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - AOI 特征将被要显示在相邻图纸逻辑示意图中的图纸剪裁，并且可能具有不规则形状。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - AOI 特征将不会被裁剪，并将保留其最初计算的矩形形状。这可能会导致部分图纸显示在相邻的图纸图中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Clip AOI to Sheets")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _clip_aoi_to_sheets_value _clip_aoi_to_sheets { get; set; } = _clip_aoi_to_sheets_value._true;

        public enum _clip_aoi_to_sheets_value
        {
            /// <summary>
            /// <para>CLIP_AOI</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CLIP_AOI")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DONT_CLIP_AOI</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DONT_CLIP_AOI")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Modified Feature Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Modified Feature Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _modified_feature_dataset { get; set; }


        public GenerateAdjoiningSheetsFeatures SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}